package org.jsola.contract.dao;

import org.apache.ibatis.annotations.Param;
import org.jsola.contract.entity.PartySignDO;
import org.jsola.contract.query.PartySignQuery;
import org.jsola.contract.vo.PartySignAccountVO;
import org.jsola.core.Page;
import org.jsola.orm.mapper.IJsolaMapper;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;


/**
 * 合同签署方签署记录
 *
 * @author JanusMix
 */
@Repository("contractPartySignDAO")
public interface IPartySignDAO extends IJsolaMapper<PartySignDO> {


    /**
     * 查询【合同签署方签署记录】详情
     *
     * @param partySignId 主键id
     * @param siteId 站点id
     * @return DO
     */
    PartySignDO findById(@Param("id") Long partySignId, @Param("siteId") String siteId);

    /**
     * 查询【合同签署方签署记录】列表行数
     *
     * @param partySignQuery query对象
     * @param siteId 站点id
     * @return 返回行数
     */
     int findCountByQuery(@Param("query")PartySignQuery partySignQuery, @Param("siteId") String siteId);

    /**
     * 查询【合同签署方签署记录】列表
     *
     * @param partySignQuery query对象
     * @param siteId 站点id
     * @return DO列表
     */
    List<PartySignDO> findListByQuery(@Param("query")PartySignQuery partySignQuery, @Param("siteId") String siteId);

    /**
     * 查询【合同签署方签署记录】分页列表
     *
     * @param partySignQuery query对象
     * @param startIndex 起始位置
     * @param pageSize 每页数量
     * @param siteId 站点id
     * @return DO列表
     */
    List<PartySignDO> findPageListByQuery(@Param("query")PartySignQuery partySignQuery, @Param("startIndex") Integer startIndex,
            @Param("pageSize") Integer pageSize, @Param("siteId") String siteId);

    /**
     * 获取合同的签署方账户信息
     *
     * @param contractId 合同id
     * @param siteId 站点id
     * @return list
     */
    List<PartySignAccountVO> findPartySignAccount(@Param("contractId") Long contractId, @Param("siteId") String siteId);

    /**
     * 查询分页
     *
     * @param partySignQuery query对象
     * @param siteId 站点id
     * @return DO分页
     */
    default Page<PartySignDO> findPageByQuery(PartySignQuery partySignQuery, String siteId) {
        int count = this.findCountByQuery(partySignQuery, siteId);
        List<PartySignDO> list;
        if (count > 0) {
            list = this.findPageListByQuery(partySignQuery, (partySignQuery.getPageNo() - 1) * partySignQuery.getPageSize(),
                    partySignQuery.getPageSize(), siteId);
        } else {
            list = new ArrayList<>();
        }
        return new Page<>(list, partySignQuery.getPageNo(), partySignQuery.getPageSize(), count);
    }
}

